home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / Firefox Backup Extension 6.0.3 / chrome / febe.jar / content / febeDrag.js < prev    next >
Text File  |  2008-08-06  |  4KB  |  93 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 6.0
  4.  
  5. // Drag and drop code
  6. // Taken from template at http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_Adding_Drag_and_Drop_to_Statusbarpanel
  7.  
  8. var febeStatObserver = {
  9.  init: function () {
  10.    febeStatObserver.flavour = "febeFla";    //any text you want but should have something to do with the extension name
  11.    febeStatObserver.statusbarPanel = "febestatusbar";//id of the statusbarpanel to drag
  12.    febeStatObserver.statbar = "status-bar";//name of statusbar
  13.    febeStatObserver.prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  14.    if(febeStatObserver.prefs.prefHasUserValue("insertAfter")){
  15.       document.getElementById(febeStatObserver.statbar).insertBefore(document.getElementById(febeStatObserver.statusbarPanel),document.getElementById(febeStatObserver.prefs.getCharPref("insertAfter")));
  16.    }   
  17.  },
  18.  getSupportedFlavours: function () {
  19.    var flavours = new FlavourSet();
  20.    flavours.appendFlavour(febeStatObserver.flavour);//text/unicode
  21.    return flavours;
  22.  },
  23.  onDragStart: function (evt,transferData,action){
  24.    var elme = evt.target;
  25.    while(elme != document.getElementById(febeStatObserver.statusbarPanel)){
  26.      elme =elme.parentNode;
  27.    }
  28.    var txt=elme.getAttribute("id");
  29.    transferData.data=new TransferData();
  30.    transferData.data.addDataForFlavour(febeStatObserver.flavour,txt);
  31.    var status = document.getElementById(febeStatObserver.statusbarPanel);
  32.    var statusbar = document.getElementById(febeStatObserver.statbar);
  33.    var child = statusbar.firstChild;
  34.    var x = 0;
  35.    while (child) {
  36.      if (child != status) {
  37.        if (!child.id) {
  38.          var newId = "statusbarpanel-noID"+x;
  39.          while (document.getElementById(newId)) newId += "x"+x;
  40.          child.id = newId;
  41.          child.setAttribute("persist", new String("id" + (child.persist ? " "+child.persist : "")) );
  42.          x++;
  43.        }
  44.        if (child.childNodes.length == 0 && document.getAnonymousNodes(child).length == 0)
  45.          child.setAttribute("abnochildren", true);
  46.        child.addEventListener("dragenter", function(event) { nsDragAndDrop.dragEnter(event,febeStatObserver); }, false);
  47.        child.addEventListener("dragover", function(event) { nsDragAndDrop.dragOver(event,febeStatObserver); }, false);
  48.        child.addEventListener("dragdrop", function(event) { nsDragAndDrop.drop(event,febeStatObserver); }, false);
  49.      }
  50.      child = child.nextSibling;
  51.    }
  52.    window.addEventListener("dragexit", function(event) { nsDragAndDrop.dragExit(event,febeStatObserver); }, true);
  53.  },
  54.  onDragEnter: function (evt,flavour,session){
  55.    var elm = evt.target;
  56.    while(elm.nodeName != "statusbarpanel"){
  57.      elm = elm. parentNode;
  58.    }
  59.  },
  60.  onDragOver: function (evt,flavour,session){
  61.    var elm = evt.target;
  62.    while(elm.parentNode.nodeName != "statusbar"){
  63.      elm = elm.parentNode;
  64.    }
  65.  },
  66.  onDrop: function (evt,dropdata,session){
  67.    if (dropdata.data!=""){
  68.      prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  69.      var elm = evt.target;
  70.      while(elm.nodeName != "statusbarpanel"){
  71.        elm = elm.parentNode;
  72.      }
  73.      // 'delta' is the difference between the mouse position when 
  74.      // the drop event occurs and the middle of the target's boxObject
  75.      // delta > 0 if the mouse is on the right of the middle
  76.      var delta = evt.clientX - (elm.boxObject.x + elm.boxObject.width / 2);
  77.      var elem = document.getElementById(dropdata.data);
  78.      var parent = elem.parentNode;
  79.      elem.setAttribute("insertafter",""+elm.getAttribute("id"));
  80.      (delta > 0) && (elm = elm.nextSibling);
  81.      if (elm) {
  82.        parent.insertBefore(elem,elm);
  83.      }
  84.      else {
  85.        parent.appendChild(elem);
  86.      }
  87.      // store the actual position into preferences
  88.      prefs.setCharPref("insertAfter",elm.getAttribute("id")+"");
  89.    }
  90.  }
  91. };
  92. window.addEventListener('load', febeStatObserver.init, false);
  93.